﻿using BadgeManager.Model;

namespace BadgeManager.Controller
{
    public class ctrlWizard
    {
        private Connector Connessione;

        public enum Risultato
        {
            BuonFine,
            CampiNonValidi,
            Errore
        }

        public ctrlWizard()
        {
            Connessione = Connector.Istance();
        }

        public Risultato SalvaTutto(Attivita attivita)
        {
            Connessione.IniziaTransazione();
            if (attivita.SenzaFine == true) { attivita.Corso = null; }

            try
            {
                if (attivita.Corso != null)//se è null è indeterminato
                {
                    if (new ctrlCorso().Inserisci(attivita.Corso) <= 0)
                        return Risultato.Errore;
                }
            }
            catch
            {
                Connessione.Rollback();
                return Risultato.Errore;
            }
            if (new ctrlAttivita(attivita, "").Inserisci() <= 0)
            {
                Connessione.Rollback();
                return Risultato.Errore;
            }
            if (attivita.DettagliAttivita != null && attivita.DettagliAttivita.Count > 0)
            {
                if (new ctrlAttivitaDettaglio(attivita).Inserisci() <= 0)
                {
                    Connessione.Rollback();
                    return Risultato.Errore;
                }
            }
            if (attivita.Persone != null && attivita.Persone.Count > 0)
            {
                ctrlPersona cPersona = new ctrlPersona();
                foreach (Persona item in attivita.Persone)
                {
                    cPersona.setPersonaToAttivita(attivita, item.Id);
                }
            }
            try
            {
                Connessione.Commit();
                if (!attivita.SenzaFine)//aggiorna la data di fine del corso
                    new ctrlCorso().UpdateDataFine(attivita);
                return Risultato.BuonFine;
            }
            catch
            {
                try
                {
                    Connessione.Rollback();
                    return Risultato.Errore;
                }
                catch
                {
                    return Risultato.CampiNonValidi;
                }
            }
        }
    }
}